﻿using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using DG.Common.Patterns.MVVM;

namespace TCC.ControleFluxoDeCaixa.Model.Fluxo
{
    public class LancamentoRecorrenteVencimento :NotifyViewModel
    {
        private int? _lancamentoId;
        private Lancamento _lancamento;
        private DateTime _vencimento;

        [Required]
        public virtual LancamentoRecorrente LancamentoRecorrente { get; set; }

        public virtual Lancamento Lancamento
        {
            get { return _lancamento; }
            set
            {
                _lancamento = value;
                OnPropertyChanged("Lancamento");
                OnPropertyChanged("StatusVencimento");
            }
        }

        //[Index(IsUnique = true)]
        [ForeignKey("Lancamento")]
        public int? LancamentoId
        {
            get { return _lancamentoId; }
            set { _lancamentoId = value; 
                OnPropertyChanged("LancamentoId"); }
        }

        [Key]
        [Column(Order = 1)]
        [ForeignKey("LancamentoRecorrente")]
        public int LancamentoRecorrenteId { get; set; }

        [Required]
        [Key]
        [Column(Order = 2)]
        public DateTime Vencimento
        {
            get { return _vencimento; }
            set
            {
                _vencimento = value;
                OnPropertyChanged("Vencimento");
                OnPropertyChanged("StatusVencimento");
            }
        }

        public StatusVencimento StatusVencimento
        {
            get
            {
                if (Lancamento != null) return StatusVencimento.Quitado;
                return Vencimento.Date >= DateTime.Now.Date
                    ? StatusVencimento.AVencer
                    : StatusVencimento.Vencido;
            }
        }

        public decimal Valor
        {
            get { return  Lancamento != null ? Lancamento.Valor : LancamentoRecorrente.ValorEsperado; }
        }
    }
}